package cn.tedu.oop;
/*本类用于测试构造方法*/
public class TestConstructor {
    //4.
    public static void main(String[] args) {
        //5.
        /*2.每一次new（实例化）创建对象时，都会自动调用构造方法*/
        Person p=new Person();
        Person p1=new Person("海绵宝宝");
        Person p2=new Person("金帮嘉诚",18,"北京");
        System.out.println("p.name = " + p.name);//通过p对象调用查看属性name的值
        System.out.println("p.age = " + p.age);//通过p对象调用查看属性age的值
        System.out.println("p.address = " + p.address);//通过p对象调用查看属性address的值


        System.out.println("p2.name = " + p2.name);//通过p对象调用查看属性name的值
        System.out.println("p2.age = " + p2.age);//通过p对象调用查看属性age的值
        System.out.println("p2.address = " + p2.address);//通过p对象调用查看属性address的值

        p.eat();

    }
}
class Person{
    //1.抽象封装形成一个类组件，描述 人 这一类型
    //2.属性--成员变量
    String name;//姓名
    int age;//年龄
    String address;//地址值

    /*1.默认存在无参构造方法，当new Person（）创建对象时，会自动触发此无参构造*/
    //普通方法的定义格式：修饰符 返回值类型 方法名（参数列表）{方法体}
    //构造方法的定义格式：修饰符  方法名【注释：与类同名】（参数列表）{方法体}

    //6.创建Person类的无参构造方法
    public Person(){
        System.out.println("调用了Person类的无参构造");
    }

    //方法的重载：在同一个类中，存在多个方法同名但参数列表不同的方法
    /*3.构造方法也存在重载的现象*/
    /*4.如果添加了含参构造，默认的无参构造会被覆盖，所以注意要手动添加无参构造*/
    //.创建Person类的含参构造
    public Person(String name){
        System.out.println("调用了Person类的有参构造"+name);
    }
    //7.创建Person类的全参构造
    /*5.全参构造可以同时完成 创建对象+给对象的所有属性赋值 这两个操作*/
    //右键空白出-Generate-Constructor-全选创建
    public Person(String name, int age, String address) {
        this.name = name;
        this.age = age;
        this.address = address;
        System.out.println("调用了Person类的全参构造");
    }

    //3.行为--方法
    public void eat(){
        System.out.println("Remember to have a breakfast");
    }
}
